import axios from 'axios';
import router from '../../router/index'
import {Message} from 'element-ui';

/**
 * 自定义反向代理域名。后台服务器域名
 */
export const globalHost = process.env.GLOBAL_HOST;


/**
 * axios全局参数配置
 */
axios.defaults.baseURL = globalHost;
axios.defaults.timeout = 0;

/**
 * 自定义axiosc对象
 */
const customAxios = axios.create({
  baseURL: globalHost,
  timeout: 0
});

/**
 * axios http request 拦截器
 */
customAxios.interceptors.request.use(
  config => {
    if (
      config.url.includes('gdd/user/register') || // 注册请求
      config.url.includes('gdd/user/login') || // 登陆请求
      config.url.includes('gdd/email/send') || // 发送验证码请求
      config.url.includes('gdd/user/modifyPassword') || // 修改密码请求
      config.url.includes('gdd/website') // 门户网站首页请求
    ) {
      // 无需登陆即可发送的请求---------------------------------------------------------->
    } else {
      // 登陆后才可以发送的请求---------------------------------------------------------->
      const jwt = sessionStorage.getItem('jwt'); // 获取本地jwt
      if (jwt) {
        /*
        自定义请求头参数Authorization，用于携带登陆凭证
        */
        config.headers.Authorization = `Bearer${jwt}`;
        /*
        全局【下载文件】请求拦截
        */
        if (config.url.includes('gdd/file/export')) {
          config.responseType = 'arraybuffer'; // 服务器响应的数据类型
          // config.onDownloadProgress = function (progressEvent) { // 允许为下载处理进度事件
          //   Math.round(progressEvent.loaded * 100 / progressEvent.total);
          // }
        }
        /*
        全局【上传文件】请求拦截
        */
        // if (config.url.includes('gdd/file/import')) {
        // config.onUploadProgress = function (progressEvent) { // 允许为上传处理进度事件
        //   // 对原生进度事件的处理
        // }
        // }
      } else {
        Message.warning('登陆超时！');
        router.replace('/login'); // 重定向到登陆页面
      }
    }
    return config;
  }, error => {
    Message.warning('网络请求异常，稍后重试！');
    return Promise.reject(error);
  });

/**
 * axios http response 拦截器
 */
customAxios.interceptors.response.use(response => {
  if (response.status === 200) {
    if (response.config.responseType === 'arraybuffer') {
      /*
        arraybuffer类型响应，文件下载
       */
    } else {
      /*
        json类型响应
       */
      const code = response.data.code;
      if (code === 0) {
      } else if (code === -1) {
        Message.warning('系统错误，请联系管理员！');
      } else if (code === 1000) {
        Message.warning('登陆超时，请重新登陆！');
        router.replace('/login'); // 重定向到登陆页面
      } else {
        Message.warning(response.data.msg);
      }
    }
  } else {
    router.replace('/error'); // 重定向到错误页面
  }
  return response.data;
}, error => {
  Message.warning('网络响应异常，稍后重试！');
  return Promise.reject(error);
});

/**
 * 封装post请求
 */
export function postRequest(url, data = {}) {
  return new Promise((resolve, reject) => {
    customAxios.post(url, data).then(response => {
      resolve(response);
    }).catch(error => {
      reject(error);
    });
  });
}

/**
 * 封装get方法
 */
export function getRequest(url, data = {}) {
  return new Promise((resolve, reject) => {
    customAxios.get(url, {params: data}).then(response => {
      resolve(response);
    }).catch(error => {
      reject(error);
    });
  });
}

